home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 147
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin
/
tools
/
ask
/
ksd
/
source
/
exfunc.c
< prev
next >
Wrap
Text File
|
1997-05-31
|
2KB
|
121 lines
/* KSDサポート関数利用サンプルプログラム */
/* 外部起動プログラム */
/* 特殊な関数は使っていないので、再コンパイル可能です */
#include <stdio.h>
#include <doslib.h>
#include <iocslib.h>
#include <class.h>
#include "ksd.h"
#define SKclr 0x3f00
#define BIT0 0x0001
#define BIT1 0x0002
int ExtFunc1()
{
union {
ULONG md;
UBYTE s[sizeof(ULONG)+1];
} ss;
int a;
printf("KSD状態1\n");
ss.md=KSDReadMode();
ss.s[sizeof(long)]=0; // EOS
printf("\tStatus : %c%c\n",a>>8,a&0xff);
a=KSDReadVer(); printf("\tVersion: %d.%d\n",a>>8,a&0xff);
}
int ExtFunc2()
{
long a;
printf("KSD状態2\n");
a=KSDReadSize(); printf("\tKBsize : %d\n",a);
a=KSDReadFree(); printf("\tKBfree : %d\n",a);
a=KSDRcheck(); printf("\tRcheck : %c\n",a);
}
UBYTE hex1(UBYTE d)
// d=$0~$f
{
return(d<10? '0'+d:'A'+d-10);
}
UBYTE *ctohex(UBYTE *tmp,UBYTE c)
// c -> hex
{
*tmp++=hex1(c>>4); // 上位4ビット
*tmp++=hex1(c&0x0f); // 下位4ビット
//*tmp++=' '; // セパレーター
return(tmp);
}
void main()
{
int c;
UBYTE tmp[10];
KSD_EF ef1,ef2;
if (!KSDSetAPI()) {
printf("KSDが組み込まれていません\n");
exit(3);
}
// 外部起動プログラム登録
ef1.Scan=SKclr>>8;
ef1.Shift=BIT1; // Ctrl
ef1.Exec=ExtFunc1;
ef1.Next=(KSD_EF *)0;
if (KSDLinkEFunc(&ef1)) {
printf("登録出来ません1\n");
exit(4);
}
ef2.Scan=SKclr>>8;
ef2.Shift=BIT0; // shift
ef2.Exec=ExtFunc2;
ef2.Next=(KSD_EF *)0;
if (KSDLinkEFunc(&ef2)) {
printf("登録出来ません2\n");
exit(5);
}
if (KSDLinkEFunc(&ef1)) {
// エラーテスト
printf("登録出来ません1(再度:無視)\n");
}
/* アクセサリを試す */
PRINT("K_KEYINP / 終了:CTRL-Z\r\n");
PRINT("SHIFT-CLR/CTRL-CLR\r\n");
while (1) {
c=K_KEYINP();
if (c==0x1a) break;
if (c<' ') {
if (c==0x0d) {
PUTCHAR('\r');
PUTCHAR('\n');
} else {
// コントロールコードは16進表示で
ctohex(tmp,c);
PRINT(tmp);
}
} else PUTCHAR(c);
}
PRINT("B_KEYINP / 終了:CTRL-Z\r\n");
PRINT("SHIFT-CLR/CTRL-CLR\r\n");
while (1) {
c=B_KEYINP()&0xff;
if (c==0x1a) break;
if (c<' ') {
if (c==0x0d) {
PUTCHAR('\r');
PUTCHAR('\n');
} else {
// コントロールコードは16進表示で
ctohex(tmp,c);
PRINT(tmp);
}
} else PUTCHAR(c);
}
// 外部起動プログラム解除
KSDUnlinkEFunc(&ef1);
KSDUnlinkEFunc(&ef2);
EXIT2(0);
}